#include<iostream>
using namespace std;
#include<queue>

const int MAX_N = 5e5 + 5;
typedef long long LL;
#define val first
#define pos second
int N, K;
int rev[MAX_N];
int ext[MAX_N];
LL A[MAX_N];

typedef pair<LL, int>PLI;

priority_queue<PLI> st;
int  main()
{
	
	cin >> N >> K;
	for (int i = 1; i <=N; i++)
	{
		cin >> A[i];
		rev[i] = i - 1;
		ext[i] = i + 1;
		st.push({ -A[i],-i });

	}
	rev[1] = -1;
	ext[N] = -1;
	while (K--)
	{
		PLI res;
		

		do
		{
			res = st.top();
			st.pop();
			res.val = -res.val;
			res.pos = -res.pos;

		} while (res.val != A[res.pos]);
		
		if (rev[res.pos] != -1)
		{
			A[rev[res.pos]] += res.val;
			st.push({ -A[rev[res.pos]],-rev[res.pos] });
			ext[rev[res.pos]] = ext[res.pos];
			





		}
		if (ext[res.pos] != -1)
		{
			
			A[ext[res.pos]] += res.val;
			st.push({ -A[ext[res.pos]],-ext[res.pos] });
			rev[ext[res.pos]] = rev[res.pos];



		}
		A[res.pos] = -1;

	}
	for (int i = 1; i <= N; i++)
	{
		if (A[i] != -1)
		{
			cout << A[i] << " ";

		}
	}
}